#include "logistics.h"
#include <stdlib.h>
#include <string.h>
#include <assert.h>

void logistics_menu(void)         //后勤主界面
{
	system("clear");
    puts("*****后勤商品系统*****");
	puts("1、添加新商品");
	puts("2、下架商品");
	puts("3、修改商品信息");
	puts("4、查找商品");
	puts("5、查看需要补货的商品");
	puts("6、遍历"); 
	puts("7、退出");
}

void goods_choicechange_menu(void)        //选择哪一项更改
{
	system("clear");
	puts("*****请选择要修改的数据*****");
	puts("1、商品名");
	puts("2、价格");
	puts("3、数量");
	puts("4、退出");
}

//后勤对商品管理
int login_logistics(void)  //后勤人员登录
{
	system("clear");


	printf("请输入后勤人员ID\n");

	int id;
	scanf("%d",&id);
	getchar();
	int pos = query_personid(id);     //记录后勤人员在结构体中的位置
	if(-1 == pos)
	{
		print_sec("没有该后勤ID",0.75);
		return -1;
	}

	printf("请输入后勤人员密码\n");
	char password[33];
	get_passwd(password,sizeof(password));
	//使用MD5进行加密
	MD5_CTX md5c;
	MD5Init(&md5c);
	int passwd_len = strlen(password);
	MD5Update(&md5c,(unsigned char*)password,passwd_len);
	MD5Final(&md5c,(unsigned char*)password);
	password[passwd_len] = '\0';

	if(0 == strcmp(person[pos].password,password))
	{
		print_sec("登录成功!",0.75);
		return 0;
	}
	print_sec("密码错误!",0.75);
	return -1;
}

void logistics(void)                 //后勤管理商品选择
{
	if(0 != login_logistics())		//登录失败
	{
		system("clear");
		return ;
	}     
	for(;;)
	{
		logistics_menu();

		switch(get_cmd('1','7'))
		{
		case '1': add_goods();	    break;     	//增加商品种类
		case '2': reduce_goods(); 	break;  	//删除商品种类
		case '3': change_goods();	break;		//修改商品信息
		case '4': find_goods(); 	break;		//查找货物
		case '5': find_lessgoods(); break;	//查找需要补货的货物
		case '6': show_goods();	    break;		//便利
		case '7':return;
		}
	}
}

void add_goods(void)          		 //添加商品种类
{
	// 判断用户是否已满
	if(cnt_goods >= GOODS_MAX)
	{
		print_sec("商品种类数量已满，无法添加！",0.75);
		return;
	}

	//输入ID
	printf("请输入商品ID(数字)\n");
	scanf("%d",&goods[cnt_goods].id);
	getchar();
	//检查ID是否被占用
	if(-1 < query_goodsid(goods[cnt_goods].id))
	{
		print_sec("该ID已被占用，无法注册！",0.75);
		return;
	}

	// 输入商品名
	printf("请输入商品名字：\n");
	get_str(goods[cnt_goods].name,sizeof(goods[cnt_goods].name));

	// 输入商品数量
	printf("请输入商品的数量:\n");
	scanf("%hd",&goods[cnt_goods].num);
	
	//输入商品价格
	printf("请输入商品的价格\n");
	scanf("%lf",&goods[cnt_goods].price);

	
	// 用户数量+1
	cnt_goods++;

	print_sec("已增加商品!",0.75);
}

void reduce_goods(void)				 //删除商品
{
	
	printf("请输入商品ID\n");
	int id;
	scanf("%d",&id);
	int place = query_goodsid(id);
	if(-1 == place)
	{
		print_sec("没有该商品!",0.75);
		return;
	}
	reduce(place,REDUCE_GOODS);
} 

void change_goods(void)              //修改商品
{
	printf("请输入要查找的商品ID:\n");

	int id;
	scanf("%d",&id);
	int position = query_goodsid(id);
	if(-1 == position)
	{
		print_sec("没有该商品!",0.75);
		return;
	}
    goods_choicechange_menu();
	switch(get_cmd('1','4'))
	{
	case '1':change_goodsname(position);break;		//修改商品名
	case '2':change_goodsprice(position);break;		//修改商品价格
	case '3':change_goodsnum(position);break;		//修改商品件数
	case '4':;
	}
}

void change_goodsname(int position) //修改商品名
{
	printf("原商品名:%s\n",goods[position].name);//显示原来商品名
	printf("请输入更改后的商品名:\n");
	get_str(goods[position].name,sizeof(goods[position].name));
	print_sec("修改成功!",1);
}

void change_goodsprice(int position) //修改价格
{
	printf("原价格:%.2lf\n",goods[position].price);//显示原来价格
	printf("请输入更改后的价格:\n");
	scanf("%lf",&goods[position].price);
	print_sec("修改成功!",1);
}

void change_goodsnum(int position) //修改数量
{
	printf("原数量:%hd\n",goods[position].num);//显示原来数量
	printf("请输入更改后的商品数量:\n");
	scanf("%hd",&goods[position].num);
	print_sec("修改成功!",1);
}


void find_goods(void)				 //查找商品
{
	printf("请输入要查找的商品ID:\n");

	int id;
	scanf("%d",&id);
	getchar();
	int place = query_goodsid(id);
	if(-1 == place)
	{
		print_sec("没有该商品!",0.75);
		return;
	}
	printf("ID:%-3d 商品名:%-12s 数量:%-4hd 价格:%-5.1lf\n",
	goods[place].id,
	goods[place].name,
	goods[place].num,
	goods[place].price);
	anykey_continue();
}

void find_lessgoods(void)			//查看需要补货的商品
{
	int sum = 0;					//需要补货的总数
	for(int i=0; i<cnt_goods; i++)
	{
		if(goods[i].num<10)			//商品小于10则需要补货
		{
			sum++;
			printf("id:%-4d 商品:%-6s 价格:%-6.1lf 数量:%-3d\n",
			goods[i].id,
			goods[i].name,
			goods[i].price,
			goods[i].num);
		}
	}
	if(0 == sum)
	{
		printf("没有商品需要补货\n");
	}
	printf("是否补货?\n");
	if(yes_or_no())
	{
		printf("请输入商品ID\n");
		int id;
		scanf("%d",&id);
		getchar();
		int place = query_goodsid(id);
		if(-1 == place)
		{
			print_sec("ID输入有误!",0.75);
		}
		printf("id:%-4d 商品:%-6s 价格:%-6.1lf 数量:%-3d\n",
			goods[place].id,
			goods[place].name,
			goods[place].price,
			goods[place].num);
			
		printf("输入补货数量:\n");
		short num = 0;		
		do									//对商品补货数量输入进行检查
		{
			scanf("%hd",&num);
			if(num<=0)
			{
				printf("您的补货数量输入错误,请重新输入!\n");
			}
		}while(num<=0);
		goods[place].num += num;
		print_sec("补货成功!",0.75);
		return;
	}
	
	print_sec("返回上一级",0.75);
}  			 

void show_goods(void) 				 //展示商品
{
	qsort(goods,cnt_goods,sizeof(goods[0]),cmp_goodsid);
	for(int i=0; i<cnt_goods; i++)
	{
		printf("id:%-4d 商品:%-6s 价格:%-6.1lf 数量:%-3d\n",
			goods[i].id,
			goods[i].name,
			goods[i].price,  
			goods[i].num);
	}
	anykey_continue();
}

